การส่งข้อมูลจาก EC2 ไปยัง Firehose
สำหรับในบล็อกนี้จะเป็นเนื้อหาเสริมต่อจากบล็อกก่อนหน้านี้เกี่ยวกับการ การใช้งาน S3 ควบคู่กับ Amazon Kinesis Data Firehose นะครับถ้าใครสนใจก็สามารถย้อนกลับไปดูตามลิ้งค์ที่แนบมาให้ได้เลยครับ ซึ่งความแตกต่างของบล็อกนี้คือเราจะมีการใช้งาน EC2 ร่วมด้วยนะครับโดยมีการใช้งานตามแผนภาพนี้เลย
ขั้นตอนการทำ
สร้าง Amazon S3 Bucket
อันดับแรกสิ่งที่เราต้องมีคือ S3 Bucket นะครับเหมือนกับบล็อกก่อนหน้านี้เลยเพื่อใช้เป็นพื้นที่ในการเก็บข้อมูลเพื่อนำมาแสดงใน Amazon Kinesis ครับ โดยผมจะกำหนดชื่อ S3 Bucket ตามตัวอย่างด้านล่างนี้นะครับ
AS3 Bucket anme: chawish-test-[date]
และสำหรับขั้นตอนและวิธีการสร้าง S3 Bucket นะครับสามารถดูได้จากลิ้งค์ด้านล่างเลยครับ
เมื่อเราสร้าง S3 Bucket เรียบร้อยแล้วอันดับต่อไปเราก็จะสร้างและใช้งาน Amazon Kinesis กันครับ
Amazon Kinesis
เมื่อเข้าสู่หน้าแรกของ Amazon Kinesis ให้เราเลือกหัวข้อ Kinisis Data Firehose ที่อยู่มุมขวานะครับและกดปุ่ม Create delivery stream ครับตามรูปด้านล่างเลยครับ
เมื่อกดเข้าไปแล้วในส่วนนี้ให้เรากำหนด Source และ Destination พร้อมกับตั้งชื่อ Delivery ที่เราต้องการนะครับโดยเลือกข้อมูลตามนี้ครับ
Source:Direct PUT
Destination:Amazon S3
Delivery stream name:chawish-test-[date]
หลังจากนั้นให้เราเลื่อนลงมาในส่วนของ Destination settings แล้วกด Browse ครับและเลือก S3 Bucket ของเราที่ทำการสร้างไปก่อนหน้านี้มาใช้งานครับ
ถัดไปให้เลื่อนลงมาในหัวข้อ Buffer hints, compression and encryption นะครับ กดที่หัวข้อเพื่อให้ระบบแสดงข้อมูลมาเพิ่มเติมและเปลี่ยนแปลงข้อมูลของ Buffer interval เป็น 120 นะครับ ก็คือกำหนดให้มีการอัพเดททุกๆ 120 วินาทีครับ
จากนั้นก็กดปุ่ม Create delivery stream ได้เลยครับ และในขั้นตอนต่อไปเราจะทำการสร้าง Role เพื่อนำมาใช้งานคู่กับ EC2 ครับ
AWS IAM
ในส่ส่วนนี้เราจะทำการสร้าง Role เพื่อใช้งานกับ EC2 ครับโดยจะเป็นการกำนหดสิทธิ์สูงสุดในกับ EC2 เพื่อใช้งาน Firehose นั้นเอง โดยให้เราเข้าไปที่หน้าแรกของ AWS IAM นะครับและเลือกหัวข้อ Role จากแทบเมนูด้านซ้าย และ กดปุ่ม Create Role ครับ
เมื่อกดเข้าไปแล้วหน้าแรกให้เราเลือกข้อมูลตามนี้นะครับ
Trsusted entity type:AWS Service
Use case:EC2
เมื่อกรอกข้อมูลเสร็จแล้วก็กด Next ตามภาพได้เลยครับ
ในหน้าถัดไประบบจะให้เราเลือก Policy หรือสิทธิ์ในการใช้งานที่เราต้องการโดยให้เราค้นหาคำว่า AmazonKinesisFirehoseFullAccess
เป็นการมอบสิทธิ์การใช้งานสูงสุดให้กับ Role ของเรา เมื่อเลือกแล้วก็กด Next ตามภาพได้เลยครับ
ในหน้าต่อไปจะเป็นหน้าแสดงข้อมูลทุกอย่างที่เราเลือกและตั้งค่ามาเพื่อให้เราตรวจสอบความถูกต้องทั้งหมด ถ้าเราตรวจสอบแล้วว่าถูกต้องก็ให้กดปุ่ม Create role ได้เลยครับเพียงเท่านี้ระบบก็จะสร้าง Role ให้เราใช้งานได้แล้ว
เมื่อระบบสร้าง Role เสร็จเราก็จเป็นชื่อ Role ที่เราสร้างอยู่ในตารางของ AWS IAM ดังรูปครับ
เมื่อเราได้ Role มาใช้งานแล้วขั้นตอนต่อไปก็คือการสร้าง EC2 Instance ครับ
EC2 Instance
ทำการติดตั้ง EC2 Instance สำหรับใช้ในการเชื่อมต่อกับ Firehose โดยทำตามลิงก์ด้านล่างนี้ครับ
จะมีส่วนของหัวข้อ Advanced details ที่เราต้องตั้งค่าเองนะครับไม่มีเนื้อหาในลิ้งค์ด้านล่าง ให้เราเลื่อนลงไปดูวิธีการตั้งค่าด้านล่างของบล็อกนะครับเมื่อทำถึงส่วนนี้แล้ว
- ※ตัวอย่างตั้งค่าการสร้าง EC2 Instance ในบทความนี้
Create Key pairs
Key pairs:
chawish-test-[date]
Launch instances
Name and tags
Name:
chawish-test-[date]
Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
(Default)Instance type
Instance type:
t3a.nano
Key pair (login)
Key pair name - required:
tinnakorn-test
Network settings
Firewall (security groups)
Security group name - required:
tinnakorn-test
Description - required:tinnakorn-test
Inbound security groups rules
Security group rule 1 (TCP, 22, 0.0.0.0/0)
Type:
ssh ▼
| Source type:My IP ▼
| Source:xxx.xxx.x.xxx/32 ✕
Configure storage
1x:
8
GiBgp2 ▼
Root volume (Default)! หลังจากนี้จะเป็นเนื้อหาที่เพิ่มเติมจากการตั้งค่าตามลิ้งค์ด้านบนนะครับ
Advanced details
IAM Instance profile: เลือก IAM Role ที่เราสร้างก่อนหน้านี้
เมื่อเราสร้าง Instance เสร็จแล้วอันดับต่อไปก็จะเป็นเกี่ยวกับการรันคำสั่งในโปรแกรม Putty นะครับ
Putty
สำหรับการเชื่อมต่อ EC2 กับ Putty สามารถดูได้จากลิ้งค์ด้านล่างนี้เลยครับ
เมื่อเราเชื่อมต่อเข้ามาได้แล้วคำสั่งแรกที่ใช้งานคือ sudo su -
นะครับเป็นการให้สิทธิ์สูงสุดในการใช้งานระบบ
ต่อไปให้เราเปลี่ยนแปลงเวลาในเซิร์ฟเวอร์ EC2 ให้เป็น Timezone ของเรานะครับด้วยคำสั่ง timedatectl set-timezone Asia/Bangkok
จากนั้นก็ลองทดสอบเวลาในระบบดูนะครับว่าเป็น Timezone ของประเทศเรารึยังด้วยคำสั่ง date
ครับ
ถ้าเวลาในเซิร์ฟตรงกับเวลาปัจจุบันของเราแล้วก็ถือว่าผ่านครับไปขั้นตอนต่อไปได้เลย
ต่อไปให้ทำการอัพเดท Package และข้อมูลพื้นฐานของเซิร์ฟเวอร์ให้เป็นเวอร์ชั่นล่าสุดนะครับด้วยคำสั่ง yum install -y
ต่อไปก็จะทำการตรวจชอบเวอร์ชั่นของ Python นะครับว่าตอนนี้มีอยู่ในเซิร์ฟเวอร์ของเราแล้วหรือไม่ด้วยคำสั่ง python3 --version
หลังจากนั้นเราก็จะทำการติดตั้ง PIP (Package Installer for Python) ลงไปยังเซิร์ฟเวอร์ของเรานะครับด้วยคำสั่งpip3 install boto3
boto3 นั้นคือ AWS SDK ที่ใช้งานสำหรับ Python โดยเฉพาะทำให้ง่ายต่อการทำงานร่วมกันของโค้ดหรือโปรแกรมที่เขียนด้วย Python ครับ
หลังจากนั้นเราก็จะทำการ Upload โค้ด Python ที่ผมสร้างมาเพื่อทดสอบการส่งข้อมูลไปยัง Firehose นะครับ
การสร้างโปรแกรมทดสอบการส่งข้อมูลไปยัง Firehose
เริ่มต้นให้เราพิมพ์คำสั่ง
cd ~/
และตามด้วย
wget https://raw.githubusercontent.com/classmethod-thailand/cmth_seminar/develop/iot_core_webinar/create_sample_json_to_firehose1.py
เพื่อ Upload โค้ด Python ที่ผมสร้างไว้ลงไปยังเซิร์ฟเวอร์ครับตามรูปด่านล่างเลย
ตามด้วยคำสั่งสร้างไฟล์ Python นะครับคือ
chmod 777 create_sample_json_to_firehose1.py
และหลังจากนั้นให้เราเข้าไปแก้ไขไฟล์นั้นนะครับโดยใช้คำสั่ง
vi create_sample_json_to_firehose1.py
ตามภาพครับ
เมื่อเข้ามาในไฟล์แล้วให้เราแก้ไขชื่อ firehose_stream_name ให้เป็นชื่อของ Firehose ที่เราสร้างนะครับวิธีการคือให้เรากด
i
ครับ เป็นการปรับโหมดเป็น insert mode ข้อมูลซึ่งในโหมดนี้เราสามารถทำการแก้ไขข้อมูลในไฟล์นั้นได้ครับตามตัวอย่างของผมก็จะเป็น
firehose_stream_name = "chawish-test-[date]"
เมื่อแก้ไขเสร็จก็กด esc
เพื่อออกจากโหมด insert mode ตามด้วยพิมพ์คำสั่ง :x
เพื่อทำการบันทึกข้อมูลที่แก้ไขและออกจากไฟล์ครับ
ขั้นตอนต่อไปก็ให้เราทำาการ Upload ไฟล์นี้ลงไปยัง Amazon S3 โดยใช้คำสั่ง
python3 create_sample_json_to_firehose1.py
หลังจากที่เรารันคำสั่งเสร็จก็ให้รอ 120 วินาทีตามที่ได้ตั้งค่า Buffer interval ไว้ แล้วกลับไปตรวจดูที่ S3 Bucket ของเราว่าระบบมีการสร้างไฟล์อะไรขึ้นมาหรือไม่ ซึ่งถ้าเราทำถูกต้องทุกขั้นตอนระบบก็จะมีการสร้างไฟล์และโฟลเดอร์ขึ้นมาตามวันและเวลา ณ ปัจจุบันนั้น ตามตัวอย่างในรูปนะครับ
ซึ่งถ้าเราเปิดดูไฟล์ที่อยู่ข้างในก็จะมีฟอร์มข้อมูลแบบนี้ถูกบันทึกอยู่ครับ
แต่ว่าในตอนนี้ ระบบยังไม่สามารถ Upload ข้อมูลได้อัตโนมัตินะครับ เราต้องรันคำสั่งทุกครั้งเมื่อต้องการจะ Upload ข้อมูลใหม่เข้าไปยัง Amazon S3 ซึ่งขั้นตอนต่อไปเราก็จะทำการตั้งค่าระบบให้สามารถส่งข้อมูลเข้าไปยัง S3 Bucket ได้อัตโนมัตินะครับ
การตั้งค่า Cron เพื่อให้ระบบส่งข้อมูลอัตโนมัติ
ขั้นตอนนี้ให้เราพิมพ์คำสั่ง
vi /etc/crontab
เพื่อทำการเพิ่มโค้ดในไฟล์นี้นะครับ โดยให้เรากด i เปลี่ยนเป็น insert mode เพื่อเพิ่มโค้ดนี้ลงไปในไฟล์นะครับ ตามตำแหน่งที่เห็นในภาพเลย
* * * * * root /usr/bin/python3 /root/create_sample_json_to_firehose1.py
เมื่อเพิ่มเสร็จก็ให้กด esc
เพื่อออกจากโหมด insert mode ตามด้วยพิมพ์คำสั่ง :x
เพื่อทำการบันทึกข้อมูลที่แก้ไขและออกจากไฟล์ครับ
หลังจากนั้นให้เรารอเวลาสัก 2-3 นาทีเพื่อดูข้อมูลใน S3 Bucket ว่าระบบมีการเพิ่มข้อมูลโดยอัตโนมัติหรือไม่ ซึ่งถ้าระบบทำงานได้ปกติก็จะเห็นว่ามีข้อมูลเพิ่มขึ้นมาเรื่อยๆนะครับดังภาพตัวอย่าง
เพียงเท่านี้ก็เป็นการเสร็จสินการตั้งค่าและใช้งาน Firehose กับ EC2 แล้วครับ
การ Delete และ Terminate เมื่อเลิกใช้งาน
ในส่วนนี้ของ EC2 ให้ทำตามลิ้งค์ด้านล่างนี้ได้เลยครับ
และในส่วนของ Firehose กับ S3 Bucket สามารถดูขั้นตอนได้จากบล็อกของผมก่อนหน้านี้ได้เลยครับตามลิ้งค์ด้านล่าง
สำหรับเนื้อหาในบล็อกครั้งนี้ผมหวังเป็นอย่างยิ่งว่าจะมีส่วนช่วยในการให้ความรู้และวิธีการใช้งาน EC2 ควบคู่กับ Firehose เพิ่มมากขึ้นนะครับ และในอนาคตข้างหน้าผมก็จะเขียนบล็อกให้ความรู้เกี่ยวกับเซอร์วิสของ AWS ต่อไปเรื่อยๆ เพื่อเป็นการเพิ่มประสบการณ์และทักษะในการใช้งาน AWS ให้มากยิ่งขึ้นครับ